Salbutamol is a short-acting beta-agonist (SABA) which acts on the smooth muscle surrounding the bronchi. By inhibiting smooth muscle contraction, it induces bronchodilation which relieves bronchoconstriction, most commonly seen in patients with asthma or COPD(1). Salbutamol is the most commonly prescribed inhaler in Scotland.
This report aims to investigate the trends regarding prescribing of salbutamol inhalers in Scotland in the year 2024, with a focus on variations across the different seasons throughout the year.
It is important to consider the influence of these factors on the prescribing of salbutamol, as
Across the NHS Health Boards, we would expect a greater number of total prescriptions in health boards with a greater overall population. If we look at data
Here are the sources of the data files used in this report:
We can find the January - June 2024 file and its specific data dictionary here: https://www.opendata.nhs.scot/dataset/prescriptions-in-the-community/resource/f0df380b-3f9b-4536-bb87-569e189b727a
data_jan_jun_2024 <- read_csv("https://www.opendata.nhs.scot/dataset/84393984-14e9-4b0d-a797-b288db64d088/resource/f0df380b-3f9b-4536-bb87-569e189b727a/download/hb_pitc2024_01_06-1.csv") %>%
clean_names()
We can find the July - December 2024 file and its specific data dictionary here: https://www.opendata.nhs.scot/dataset/prescriptions-in-the-community/resource/f3b9f2e2-66c0-4310-9b8e-734781d2ed0a
data_jul_dec_2024 <- read_csv("https://www.opendata.nhs.scot/dataset/84393984-14e9-4b0d-a797-b288db64d088/resource/f3b9f2e2-66c0-4310-9b8e-734781d2ed0a/download/hb_pitc2024_07_12-1.csv") %>%
clean_names()
We can find the Health Board names dataset and its specific data dictionary here: https://www.opendata.nhs.scot/dataset/geography-codes-and-labels/resource/652ff726-e676-4a20-abda-435b98dd7bdc
HB_lookup <- read_csv("https://www.opendata.nhs.scot/dataset/9f942fdb-e59e-44f5-b534-d6e17229cc7b/resource/652ff726-e676-4a20-abda-435b98dd7bdc/download/hb14_hb19.csv") %>%
clean_names()
We can find the NHS Health Boards geographical datasets here: https://www.data.gov.uk/dataset/27d0fe5f-79bb-4116-aec9-a8e565ff756a/nhs-health-boards-scotland
NHS_healthboards <- st_read(here("data", "SG_NHS_HealthBoards_2019.shp"))
We can find the population datasets by health board here: https://statistics.ukdataservice.ac.uk/dataset/scotland-s-census-2022-uv102a-age-by-sex
population_data <- read_csv(here( "data", "UV102a_age_health_board_census.csv"), skip = 10) %>%
# Rename the last column to avoid the messy name in column 6
# and to match column names with the prescription dataset
rename(Spare = "...6",
hb_name = "Health Board Area 2019",
hb_population = Count) %>%
# filter the data so that we get the population of the entire health board
filter(Age == "All people" & Sex == "All people") %>%
# select only the relevant columns
select(hb_name, hb_population) %>%
# change health board names so they match the prescription data
mutate(hb_name = paste("NHS", hb_name))
combined_data_2024 <- bind_rows(data_jan_jun_2024, data_jul_dec_2024) %>%
clean_names() %>%
full_join(HB_lookup, by = c("hbt" = "hb")) %>%
select(hb_name, hbt:paid_date_month) %>%
filter(!is.na(hb_name)) %>%
full_join(population_data,
by = join_by(hb_name)) %>%
mutate(season = case_when(
paid_date_month %in% c(202403, 202404, 202405) ~ "Spring",
paid_date_month %in% c(202406, 202407, 202408) ~ "Summer",
paid_date_month %in% c(202409, 202410, 202411) ~ "Autumn",
paid_date_month %in% c(202412, 202401, 202402) ~ "Winter"
)
)
#
salbutamol_inhalers <- c("SALBUTAMOL", "AIROMIR", "ASMALAL", "SALAMOL", "SALBULIN", "VENTOLIN")
salbutamol_inhaler_data <- combined_data_2024 %>%
filter(
str_detect(bnf_item_description,
paste(salbutamol_inhalers, collapse = "|"))
) %>%
filter(
str_detect(bnf_item_description, "HALER")
)
All of the data files were used to produce the following results consisting of a summary table, line graphs and a map.
salbutamol_inhaler_data_table <- salbutamol_inhaler_data %>%
group_by(
hb_name,
hb_population
) %>%
summarise(
quantity_per_1k = (sum(paid_quantity)/mean(hb_population))*1000
) %>%
ungroup() %>%
gt() %>%
tab_header(
title = "Prescription of Salbutamol Inhalers across NHS Health Boards"
) %>%
tab_source_note(
source_note = "Source: 2024 Prescription datasets from the NHS OpenData sources, Health Board Population data from Scotland's Census Data in UK Data Service source"
) %>%
cols_label(
hb_name = "Health Board",
hb_population = "Health Board Population",
quantity_per_1k = "Salbutamol Inhaler Prescriptions Per 1,000 people"
) %>%
fmt_number(
columns = quantity_per_1k,
decimals = 0
) %>%
opt_stylize()
salbutamol_inhaler_data_table
| Prescription of Salbutamol Inhalers across NHS Health Boards | ||
| Health Board | Health Board Population | Salbutamol Inhaler Prescriptions Per 1,000 people |
|---|---|---|
| NHS Ayrshire and Arran | 365256 | 117,095 |
| NHS Borders | 116821 | 113,141 |
| NHS Dumfries and Galloway | 145895 | 137,279 |
| NHS Fife | 371781 | 121,974 |
| NHS Forth Valley | 302784 | 111,427 |
| NHS Grampian | 581040 | 81,183 |
| NHS Greater Glasgow and Clyde | 1177213 | 120,673 |
| NHS Highland | 321321 | 99,703 |
| NHS Lanarkshire | 668027 | 123,448 |
| NHS Lothian | 904628 | 87,952 |
| NHS Orkney | 21958 | 70,143 |
| NHS Shetland | 22986 | 77,049 |
| NHS Tayside | 413992 | 111,984 |
| NHS Western Isles | 26140 | 112,417 |
| Source: 2024 Prescription datasets from the NHS OpenData sources, Health Board Population data from Scotland's Census Data in UK Data Service source | ||
This table summarises the relevant data
make_line_graph <- function(
df,
title,
subtitle = NULL,
facet = FALSE) {
seasonal_plot <- ggplot(
df,
aes(
x = season,
y = total_quantity_per_1k,
group = if (facet) hb_name else 1,
text = paste(
"Season: ", season, "<br>",
"Total Prescriptions per 1,000: ", scales::comma(total_quantity_per_1k, accuracy = 1)
)
)
) +
geom_line(color = "darkgreen", linewidth = 1) +
geom_point() +
labs(
x = "Season",
y = "Total Salbutamol Inhaler Prescriptions per 1,000 people",
title = title,
subtitle = subtitle
) +
theme_bw() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
if (facet) {
seasonal_plot <- seasonal_plot + facet_wrap(~ hb_name, ncol = 3, scales = "free")
}
return(seasonal_plot)
}
total_population_scotland <- population_data %>%
summarise(
total_population = sum(hb_population, na.rm = TRUE)
) %>%
pull(total_population)
seasonal_totals <- salbutamol_inhaler_data %>%
mutate(
season = factor(season, levels = c("Spring", "Summer", "Autumn", "Winter"))
) %>%
group_by(season) %>%
summarise(
total_quantity = sum(paid_quantity, na.rm = TRUE)
)
salbutamol_prescriptions_2024 <- seasonal_totals %>%
mutate(
total_quantity_per_1k = (total_quantity / total_population_scotland) * 1000
)
scotland_plot <- make_line_graph(
salbutamol_prescriptions_2024,
title = "Seasonal Salbutamol Prescriptions per 1,000 people in 2024"
)
scotland_plotly <- ggplotly(
scotland_plot,
tooltip = c("text")
) %>%
config(displayModeBar = FALSE)
scotland_plotly
The above graph shows the prescriptions of salbutamol inhalers in Scotland throughout the 4 seasons (spring, summer, autumn and winter) in the year 2024.
There is a clear increase in the number of salbutamol inhaler prescriptions during the winter months compared to the other seasons.
seasonal_hb_totals <- salbutamol_inhaler_data %>%
group_by(hb_name, season) %>%
summarise(
total_quantity = sum(paid_quantity, na.rm = TRUE),
population = mean(hb_population, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
season = factor(season, levels = c("Spring", "Summer", "Autumn", "Winter"))
) %>%
mutate(
total_quantity_per_1k = (total_quantity / population) * 1000
)
health_board_plot <- make_line_graph(
seasonal_hb_totals,
title = "Seasonal Salbutamol Prescriptions by Health Board",
subtitle = "Prescriptions per 1,000 people",
facet = TRUE
)
health_board_plot
To further analyse the potential correlation between seasons and prescribing of salbutamol inhalers, the above graphs were produced. Each graph shows the trends in salbutamol inhaler prescriptions across the 4 seasons for each of the 14 health boards.
These graphs allow for comparisons in the seasonal trends in prescriptions between health boards. From this data we can see, similar to the previous graph showing total salbutamol prescriptions across Scotland, that the majority of health boards observe increases in prescriptions during the winter season.
While there are increased prescriptions in winter months in the majority of the health borads, there are similar increases observed in the spring season in the health boards NHS Orkney, Shetland, Tayside and Western Isles. Of these health boards, NHS Western Isles sees a larger peak in prescriptions during spring than winter, and interestingly, NHS Shetland sees its lowest number of prescriptions in winter.
salbutamol_inhaler_map_data <- NHS_healthboards %>%
full_join(salbutamol_inhaler_data,
by = join_by(HBCode == hbt)) %>%
filter(!is.na(HBName)) %>%
group_by(hb_name, season, hb_population) %>%
summarise(
paid_quantity = sum(paid_quantity)
) %>%
summarise(
quantity_per_1k = (paid_quantity/hb_population)*1000
)
map_salbutamol_inhaler_per_1k <- salbutamol_inhaler_map_data %>%
ggplot(
aes(
fill = quantity_per_1k,
text = paste(
"Health Board: ",
hb_name, "<br>Prescriptions per 1,000: ", comma(quantity_per_1k, accuracy = 1)
)
)
) +
geom_sf(colour = "black", size = 0.1) +
scale_fill_distiller(
palette = "Greens",
direction = 1, name = "No. of Prescriptions per 1,000 people",
labels = scales::comma_format()
) +
labs(title = "Salbutamol Inhaler Prescriptions by Health Board") +
theme_void() +
theme(plot.title = element_text(face = "bold", size = 16), plot.subtitle = element_text(size = 8))
map_salbutamol_inhaler_per_1k
This map shows the number of prescriptions of salbutamol inhalers in each health board.
Include Limitations of data and next steps (particularly in terms of data that would allow for further analysis)
However, there are some limitations in the data used in this report. For instance, this report only investigates the available data for the year 2024. Therefore, we cannot conclude that the trends seen in the above data is representative of the seasonal trends in salbutamol inhaler prescriptions in Scotland. It is also difficult to come to a conclusion with the avaiable data whether the trends observed are directly caused by seasonal changes in the environment and weather, as opposed to being correlated with seasonal changes. Lack of acknowledgement of potential confounding variables is a limiting factor in this report.
Regarding potential next steps, it would be useful to research further into seasonal trends in other years along with 2024 to investigate whether the trends observed above are yearly, or if they are different each year. There are no datasets for asthma or COPD prevalence in the ‘Public Health Scotland’ website (https://www.opendata.nhs.scot/). If such data were to become available, the potential seasonal influences could be further studied and investigated in relation to salbutamol inhaler prescriptions for patients with asthma or COPD separately. Since salbutamol inhalers are primarily prescribed for asthma and COPD (and some other conditions as well), it would be useful to investigate whether seasonal changes affect the number of prescriptions for one condition more than the other (for example, if seasonal changes affect asthma patients more than COPD patients and vice versa).
1.Marques L, Vale N. Salbutamol in the management of asthma: A review. International Journal of Molecular Sciences [Internet]. 2022;23(22). Available from: https://pmc.ncbi.nlm.nih.gov/articles/PMC9696300/